/* ****************************************************************** **
**    OpenSees - Open System for Earthquake Engineering Simulation    **
**          Pacific Earthquake Engineering Research Center            **
** ****************************************************************** */

//
// 文件: GPUMaterialExtractor.h
// 说明: GPU材料参数提取器（避免循环依赖）
// 作者: OpenSees GPU加速项目组
//

#ifndef GPUMaterialExtractor_h
#define GPUMaterialExtractor_h

#include "GPUElementSupport.h"

class Element;

/**
 * @brief GPU材料参数提取器
 *
 * 此类负责从OpenSees单元中提取材料参数到GPU数据结构
 * 通过单独的编译单元，避免GPUSolver.cpp的include依赖问题
 */
class GPUMaterialExtractor {
public:
    /**
     * @brief 从Quad单元提取材料参数
     *
     * @param theElement OpenSees单元指针
     * @param elemData GPU单元数据结构（输出）
     * @return 0-成功，-1-失败
     */
    static int extractQuadMaterial(Element* theElement, GPUElementData& elemData);

    /**
     * @brief 从Truss单元提取材料参数
     */
    static int extractTrussMaterial(Element* theElement, GPUElementData& elemData);

    /**
     * @brief 从Beam单元提取材料参数
     */
    static int extractBeamMaterial(Element* theElement, GPUElementData& elemData);
};

#endif // GPUMaterialExtractor_h
